perm filename FOO[MBS,LCS] blob
sn#276925 filedate 1977-04-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .<< General PUB Macros in GENRAL.PUB[SUB,SYS]
C00003 00003 .<< Set up fonts and text responses for device selected. >>
C00010 00004 .<< Digest number of sides per page and columns per side. >>
C00012 00005 .<< Set line spacing to new value. >>
C00013 00006 .<< Number sections. >>
C00018 00007 .<< Start text justification. >>
C00019 00008 .<< Put in a footnote. >>
C00020 00009 .<< Generate table of contents. >>
C00022 00010 .<< Set up for body of text. >>
C00023 ENDMK
C⊗;
.<< General PUB Macros in GENRAL.PUB[SUB,SYS]
. Version 1.1, 4 March 1976
. Brian P. McCune
.
.Documentation for this set of general PUB macros is in GENRAL.BPM[UP,DOC]. >>
.<< Set up fonts and text responses for device selected. >>
.
.IF THISDEVICE = "XGP" THEN
.
.START "XGP"
.
.<< Turn on quote character ("α") and font switching character ("%"). >>
.
.TURN ON "α%";
.
.
.AT "//" ENTRY "/"
. ⊂
. LASTFONT1 ← THISFONT;
. ("%2ENTRY%" & LASTFONT1);
. ⊃;
.
.AT "⊗⊗" ENTRY "⊗"
. ⊂
. LASTFONT2 ← THISFONT;
. ("%3ENTRY%" & LASTFONT2);
. ⊃;
.
.<< Print page headings on XGP (using boldface) before new page started. >>
.
.RECURSIVE MACRO STANDARD TITLES
. ⊂
. IF !HF THEN
. BEGIN "OUTPUT HEADING"
. NOFILL;
. TURN ON "←→{";
. PREFACE 0;
. INDENT 0,0,0;
. IF EVEN PAGE
. THEN
. START "LOOK FOR EVEN PAGE HEADING"
. IF LENGTH(!EH) THEN
. START "OUTPUT EVEN PAGE HEADING"
. PLACE HEADING;
. SELECT 3;
. !EH;
. END "OUTPUT EVEN PAGE HEADING";
. END "LOOK FOR EVEN PAGE HEADING"
. ELSE
. START "LOOK FOR ODD PAGE HEADING"
. IF LENGTH(!OH) THEN
. START "OUTPUT ODD PAGE HEADING"
. PLACE HEADING;
. SELECT 3;
. !OH;
. END "OUTPUT ODD PAGE HEADING";
. END "LOOK FOR ODD PAGE HEADING";
. END "OUTPUT HEADING";
. ⊃;
.
.END "XGP"
.
.ELSE IF THISDEVICE = "LPT" THEN
.
.START "LPT"
.
.<< Turn on quote character ("α"), underline characters ("↓_"), and font switching
.character ("%") just for compatibility with XGP. >>
.
.TURN ON "α↓_%";
.
.<< Print //underlined/ or ⊗⊗in all capital letters⊗. >>
.
.AT "//" ENTRY "/" ⊂ "↓_ENTRY_↓" ⊃;
.
.AT "⊗⊗" ENTRY "⊗" ⊂ (↑ "ENTRY"); ⊃;
.
.<< Print page headings on LPT (using all capitals) before new page started. >>
.
.RECURSIVE MACRO STANDARD TITLES
. ⊂
. IF !HF THEN
. BEGIN "OUTPUT HEADING"
. NOFILL;
. TURN ON "←→{";
. PREFACE 0;
. INDENT 0,0,0;
. IF EVEN PAGE
. THEN
. START "LOOK FOR EVEN HEADING"
. IF LENGTH(!EH) THEN
. START "OUTPUT EVEN HEADING"
. PLACE HEADING;
⊗⊗{!EH}⊗
. END "OUTPUT EVEN HEADING";
. END "LOOK FOR EVEN HEADING"
. ELSE
. START "LOOK FOR ODD HEADING"
. IF LENGTH(!OH) THEN
. START "OUTPUT ODD HEADING"
. PLACE HEADING;
⊗⊗{!OH}⊗
. END "OUTPUT ODD HEADING";
. END "LOOK FOR ODD HEADING";
. END "OUTPUT HEADING";
. ⊃;
.
.END "LPT"
.
.ELSE USERERR("DEVICE argument not XGP or LPT");
.<< Digest number of sides per page and columns per side. >>
.
.<< Make sure one or two sides chosen. >>
.
.IF SIDES ≠ 1 ∧ SIDES ≠ 2 THEN USERERR("SIDES argument not 1 or 2");
.
.<< Set up page frame and COLMNS macro for selected device. >>
.
.TITLE AREA HEADING LINES 1 TO 3;
.IF THISDEVICE = "XGP"
. THEN
. START "XGP"
. PAGE FRAME 54 HIGH 82 WIDE;
. ODDLEFTBORDER ← EVENLEFTBORDER ← 1000;
. MACRO COLMNS(NUMCOLS)
. ⊂
. IF NUMCOLS = 1
. THEN AREA TEXT LINES 4 TO 54
. ELSE IF NUMCOLS = 2
. THEN AREA TEXT LINES 4 TO 54 IN 2 COLUMNS 5 APART
. ELSE USERERR("COLMNS argument not 1 or 2");
. COLS ← NUMCOLS;
. SSNAME ← NULL;
. PLACE TEXT;
. NEXT PAGE;
. ⊃;
. END "XGP"
. ELSE
. START "LPT"
. PAGE FRAME 53 HIGH 65 WIDE;
. MACRO COLMNS(NUMCOLS)
. ⊂
. IF NUMCOLS = 1
. THEN AREA TEXT LINES 4 TO 53
. ELSE IF NUMCOLS = 2
. THEN AREA TEXT LINES 4 TO 53 IN 2 COLUMNS 5 APART
. ELSE USERERR("COLMNS argument not 1 or 2");
. COLS ← NUMCOLS;
. SSNAME ← NULL;
. PLACE TEXT;
. NEXT PAGE;
. ⊃;
. END "LPT";
.<< Set line spacing to new value. >>
.
.MACRO SPACES(NUMSPACES)
. ⊂
. IF NUMSPACES > 0
. THEN
. START "SET NEW INTER- AND INTRA-PARAGRAPH SPACING"
. BREAK;
. PREFACE NUMSPACES;
. SPREAD ← NUMSPACES;
. END "SET NEW INTER- AND INTRA-PARAGRAPH SPACING"
. ELSE USERERR("SPACES argument not positive integer");
. ⊃;
.<< Number sections. >>
.
.<< Either go to new page or not upon new section or appendix. >>
.
.MACRO NEW_PAGE_ON_SECTION(NEW_PAGE_FLAG)
. ⊂
. IF NEW_PAGE_FLAG = TRUE
. THEN MACRO NEW SECTION
. ⊂
. SKIP TO COLUMN 1;
. IF SIDES = 2 ∧ EVEN PAGE THEN NEXT PAGE;
. ⊃
. ELSE IF NEW_PAGE_FLAG = FALSE THEN MACRO NEW SECTION
. ⊂
. IF LINES < (6 + 6*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 3;
. ⊃
. ELSE USERERR("NEW_PAGE_ON_SECTION argument not TRUE or FALSE");
. ⊃;
.
.<< Generate section heading and table of contents entry. >>
.
.COUNT SECTION FROM 1 TO 99;
.MACRO S(NAME)
. ⊂
. SECNAME ← SSNAME ← NULL;
. BEGIN "PRINT SECTION HEADING"
. NEW SECTION;
. NEXT SECTION;
. TURN ON "{";
. INDENT 0,4,0;
. NOJUST;
. RETAIN;
⊗⊗{SECTION!}. NAME⊗
. SKIP 1;
. SECNAME ← "NAME";
. SEND CONTENTS
. ⊂
. INDENT 0,4,4;
. SKIP 1;
. GUARANTEE LINES 6;
{SECTION!}. NAME→ {PAGE!}
. ⊃;
. END "PRINT SECTION HEADING";
. ⊃;
.
.<< Generate subsection heading and table of contents entry. >>
.
.COUNT SUBSECTION FROM 1 TO 99 IN SECTION PRINTING "!.1";
.MACRO SS(NAME)
. ⊂
. SSNAME ← NULL;
. BEGIN "PRINT SUBSECTION HEADING"
. IF LINES < (5 + 5*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 2;
. NEXT SUBSECTION;
. TURN ON "{";
. INDENT 3,8,0;
. NOJUST;
. RETAIN;
⊗⊗{SUBSECTION!} NAME⊗
. SSNAME ← "NAME";
. SEND CONTENTS
. ⊂
. INDENT 4,9,4;
. GUARANTEE LINES 4;
{SUBSECTION!} NAME→ {PAGE!}
. ⊃;
. END "PRINT SUBSECTION HEADING";
. ⊃;
.
.<< Generate subsubsection heading and table of contents entry. >>
.
.COUNT SUB2 FROM 1 TO 99 IN SUBSECTION PRINTING "!.1";
.MACRO SSS(NAME)
. ⊂
. BEGIN "PRINT SUBSUBSECTION HEADING"
. IF LINES < (4 + 4*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 1;
. NEXT SUB2;
. TURN ON "{";
. INDENT 6,13,0;
. NOJUST;
. RETAIN;
⊗⊗{SUB2!} NAME⊗
. SEND CONTENTS
. ⊂
. INDENT 9,16,4;
. GUARANTEE LINES 2;
{SUB2!} NAME→ {PAGE!}
. ⊃;
. END "PRINT SUBSUBSECTION HEADING";
. ⊃;
.
.<< Generate appendix heading and table of contents entry. >>
.
.COUNT APPENDIX FROM 1 TO 99 PRINTING "A";
.MACRO APP(NAME)
. ⊂
. SECNAME ← SSNAME ← NULL;
. BEGIN "PRINT APPENDIX HEADING"
. NEW SECTION;
. NEXT APPENDIX;
. TURN ON "{";
. INDENT 0,4,0;
. NOJUST;
. RETAIN;
⊗⊗Appendix {APPENDIX!}. NAME⊗
. SKIP 1;
. SECNAME ← "Appendix " & APPENDIX!;
. SSNAME ← "NAME";
. IF APPENDIX = 1 THEN
. BEGIN "FIRST TIME"
. SECTYPE ← "Appendix";
. SEND CONTENTS
. ⊂
. IF LINES < (6 + 4*SPREAD)
. THEN SKIP TO LINE 1
. ELSE SKIP 2;
. INDENT 12,18,0;
⊗⊗Appendix→Page⊗
. ⊃;
. IF SIDES = 1 THEN EVERY HEADING({SECNAME},{SSNAME},{PAGE!});
. END "FIRST TIME";
. SEND CONTENTS
. ⊂
. SKIP 1;
. INDENT 0,4,4;
. GUARANTEE LINES 2;
{APPENDIX!}. NAME→ {PAGE!}
. ⊃;
. END "PRINT APPENDIX HEADING";
. ⊃;
.
.<< Generate centered subtitle heading without table of contents entry. >>
.
.MACRO CB(TITLE)
. ⊂
. BEGIN "PRINT CENTERED HEADING"
. TURN ON "←";
. IF LINES < (3 + 3*SPREAD) THEN SKIP TO LINE 1;
⊗⊗←TITLE⊗
. END "PRINT CENTERED HEADING";
. ⊃;
.<< Start text justification. >>
.
.MACRO JUSTIFY
. ⊂
. FILL;
. ADJUST;
. RETAIN;
. ⊃;
.<< Put in a footnote. >>
.
.COUNT FOOTNOTE INLINE FROM 1 TO 999 IN SECTION PRINTING
. (IF THISDEVICE = "XGP" THEN "%51%*" ELSE "[1]");
.FOOTSEP ← "__________";
.AT "∪∪" ENTRY "∪"
. ⊂
. NEXT FOOTNOTE;
. FOOTNOTE!;
. SEND FOOT
. ⊂
. BEGIN "NEXT FOOTNOTE"
. SELECT 1;
. JUSTIFY;
. SPACES 1;
. INDENT 0,0,0;
. (FOOTNOTE! & " ");
ENTRY
. END "NEXT FOOTNOTE";
. ⊃;
. ⊃;
.<< Generate table of contents. >>
.
.MACRO COLLECT CONTENTS
. ⊂
. COUNT PAGE FROM 1 TO 99 PRINTING "i";
. IF SIDES = 2
. THEN
. START "TWO SIDED HEADING"
. ODD HEADING(,Table of Contents,{PAGE!});
. EVEN HEADING({PAGE!},Table of Contents,);
. END "TWO SIDED HEADING"
. ELSE EVERY HEADING(,Table of Contents,{PAGE!});
. PORTION CONTENTS;
. PLACE HEADING;
. PLACE TEXT;
. FILL;
. NOJUST;
. RETAIN;
. CRBREAK;
. PREFACE SPREAD - 1;
. TURN ON "{→";
. SECTYPE ← "Section";
. MACRO GUARANTEE LINES(MINIMUM_LINES)
. ⊂
. IF LINES < (MINIMUM_LINES*SPREAD + SPREAD - 1) THEN
. BEGIN "NEW COLUMN"
. SKIP TO LINE 1;
. INDENT 12,18,0;
⊗⊗{SECTYPE}→Page⊗
. END "NEW COLUMN";
. ⊃;
. INDENT 12,18,0;
⊗⊗Section→Page⊗
. RECEIVE;
. ⊃;
.<< Set up for body of text. >>
.
.PORTION MAIN
.
.IF SIDES = 2
. THEN
. START "TWO SIDED HEADING"
. EVEN HEADING({PAGE!},,{SECNAME});
. ODD HEADING({SSNAME},,{PAGE!});
. END "TWO SIDED HEADING"
. ELSE EVERY HEADING({SECNAME},,{PAGE!});
.SECNAME ← SSNAME ← NULL;
.PLACE HEADING;
.
.PLACE TEXT;
.SELECT 1;
.JUSTIFY;
.INDENT 0,0,0;
.SPACES 1;
.NEW_PAGE_ON_SECTION TRUE;
.COUNT PAGE FROM 1 TO 999;